package com.loong.web.gp4j.dao.user;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import com.loong.web.gp4j.bean.schema.user.UserSchema;
import com.loong.web.suppert.collection.param.ParamMap;

/**
 * 用户数据访问
 * 
 * @author 张成轩
 */
@Repository
public class UserDao {

	@Resource
	private SqlSessionTemplate template;

	/**
	 * 添加用户
	 * 
	 * @param user 用户对象
	 * @return 插入条数
	 */
	public int insert(UserSchema user) {

		return template.insert("insertUser", user);
	}

	/**
	 * 更新用户
	 * 
	 * @param user 用户对象
	 * @return 插入条数
	 */
	public int update(UserSchema user) {

		return template.insert("updateUser", user);
	}

	/**
	 * 查询用户
	 * 
	 * @param id id
	 * @return 用户对象
	 */
	public UserSchema get(Integer id) {

		return template.selectOne("getUser", id);
	}

	/**
	 * 查询用户及权限
	 * 
	 * @param id id
	 * @return 用户对象
	 */
	public UserSchema getWithAuths(Integer id) {

		return template.selectOne("getUserWithAuths", id);
	}

	/**
	 * 查询用户及详情
	 * 
	 * @param id id
	 * @return 用户对象
	 */
	public UserSchema getWithDetail(Integer id) {

		return template.selectOne("getUserWithDetail", id);
	}

	/**
	 * 通过用户名查询用户详情
	 * 
	 * @param user 用户名
	 * @return 用户对象
	 */
	public UserSchema getByUser(String user) {

		return template.selectOne("getUserByUser", user);
	}

	/**
	 * 通过用户名查询用户详情
	 * 
	 * @param user 用户名
	 * @return 用户对象
	 */
	public UserSchema getByUserWithAuths(String user) {

		return template.selectOne("getUserByUserWithAuths", user);
	}

	/**
	 * 分页查询用户列表
	 * 
	 * @param params 参数
	 * @return 用户列表
	 */
	public List<UserSchema> query(ParamMap params) {

		return template.selectList("queryUser", params);
	}

	/**
	 * 分页查询用户列表
	 * 
	 * @param auths 权限集
	 * @param status 用户状态
	 * @return 用户列表
	 */
	public List<UserSchema> getByAuths(Collection<Integer> auths, Integer status) {

		return getByAuths(auths, status, null);
	}

	/**
	 * 分页查询用户列表
	 * 
	 * @param auths 权限集
	 * @param status 用户状态
	 * @param messageId 消息id
	 * @return 用户列表
	 */
	public List<UserSchema> getByAuths(Collection<Integer> auths, Integer status, Integer messageId) {

		Map<String, Object> params = new HashMap<String, Object>();
		params.put("auths", auths);
		params.put("status", status);
		params.put("messageId", messageId);
		return template.selectList("getUserByAuths", params);
	}
}
